home *** CD-ROM | disk | FTP | other *** search
/ The Very Best of Atari Inside / The Very Best of Atari Inside 1.iso / mint / mntlb20 / lib / wait.c < prev    next >
C/C++ Source or Header  |  1991-11-16  |  681b  |  38 lines

  1. /*
  2.  * wait.c: a version of wait() for MiNT
  3.  */
  4.  
  5. #include <errno.h>
  6. #include <osbind.h>
  7. #include "mintbind.h"
  8.  
  9. /* under TOS, vfork() puts its result in __waitval */
  10. extern long __waitval;    /* in thread.c */
  11.  
  12. int wait(status)
  13.     int *status;
  14. {
  15.     long r;
  16.     int exit_status, sig_term, pid;
  17.     extern int __mint;
  18.  
  19.     if (__mint == 0) {    /* wait is faked by vfork() */
  20.         r = __waitval;
  21.         __waitval = -ENOENT;
  22.     }
  23.     else
  24.         r = Pwait3(0, 0L);
  25.  
  26.     if (r < 0) {
  27.         errno = -r;
  28.         return -1;
  29.     }
  30.     pid = (r & 0xffff0000L) >> 16;
  31.     exit_status = r & 0x000000ffL;
  32.     sig_term = (r & 0x00007f00L) >> 8;
  33.     if (status) {
  34.         *status = (exit_status << 8) | sig_term;
  35.     }
  36.     return pid;
  37. }
  38.